// Datum                                Naam programmeur
//   Beschrijving                         Storynummer
//======================================================
// 25/11/2013                           Leys Thomas (c1026794)
//   Creatie ZoekVliegtuigView            UC 1.4 S01
// 27/11/2013                           Leys Thomas (c1026794)
//   Zoekknop toegevoegd                  UC 1.4 S02

package views.searchViews;

import javax.swing.JFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.ListSelectionModel;

import core.logic.services.utilServices.ValidatieService;
import core.models.dataModels.searchModels.ZoekVliegtuigModel;
import core.models.domainModel.Eigenaar;
import core.models.domainModel.Vliegtuig;

import javax.swing.JButton;

import controllers.searchControllers.ZoekVliegtuigController;
import controllers.updateControllers.UpdateVliegtuigenController;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.JScrollPane;

public class ZoekVliegtuigView extends JFrame {
	private static final long serialVersionUID = 1L;
	
	private JPanel pnlZoekCriteria;
	private JLabel lblVliegtuignummer;
	private JLabel lblModel;
	private JLabel lblType;
	private JLabel lblEigenaar;
	private JTextField txtVliegtuignummer;
	private JComboBox<String> cmbModel;
	private JComboBox<String> cmbType;
	private JComboBox<Eigenaar> cmbEigenaar;
	private JButton btnZoeken;
	private JList<Vliegtuig> lstVliegtuigen;
	
	private ZoekVliegtuigModel zoekVliegtuigModel;
	private JButton btnWijzigen;
	
	public ZoekVliegtuigView(ZoekVliegtuigModel model) {
		
		this.zoekVliegtuigModel = model;
		setTitle("Zoek vliegtuigen");
		
		pnlZoekCriteria = new JPanel();
		pnlZoekCriteria.setBorder(new TitledBorder(null, "Zoekcriteria", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		
		JScrollPane scrollPane = new JScrollPane();
		GroupLayout groupLayout = new GroupLayout(getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(Alignment.TRAILING, groupLayout.createSequentialGroup()
					.addContainerGap()
					.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
						.addComponent(scrollPane, Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 891, GroupLayout.PREFERRED_SIZE)
						.addComponent(pnlZoekCriteria, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 891, Short.MAX_VALUE))
					.addContainerGap())
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.TRAILING)
				.addGroup(Alignment.LEADING, groupLayout.createSequentialGroup()
					.addContainerGap()
					.addComponent(pnlZoekCriteria, GroupLayout.PREFERRED_SIZE, 120, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 411, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
		);
		
		lstVliegtuigen = new JList<Vliegtuig>();
		scrollPane.setViewportView(lstVliegtuigen);
		lstVliegtuigen.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent arg0) {
				if (lstVliegtuigen.getSelectedIndex() == -1)
				{
					btnWijzigen.setVisible(false);
				}
				else
				{
					btnWijzigen.setVisible(true);
				}
			}
		});
		lstVliegtuigen.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		lblVliegtuignummer = new JLabel("Vliegtuignummer");
		lblModel = new JLabel("Model");
		lblType = new JLabel("Type");
		lblEigenaar = new JLabel("Eigenaar");
		
		txtVliegtuignummer = new JTextField();
		txtVliegtuignummer.setColumns(10);
		
		cmbModel = new JComboBox<String>();
		cmbType = new JComboBox<String>();
		cmbEigenaar = new JComboBox<Eigenaar>();
		
		
		btnZoeken = new JButton("Zoeken");
		btnZoeken.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int vliegtuigNummer = -1;
				if (!txtVliegtuignummer.getText().isEmpty()) {
					if (ValidatieService.isInteger(txtVliegtuignummer, "Vliegtuignummer")) {
						vliegtuigNummer = Integer.parseInt(txtVliegtuignummer.getText());
					}
				}
				Eigenaar eigenaar = (Eigenaar) cmbEigenaar.getSelectedItem();
				String model = (String) cmbModel.getSelectedItem();
				String type = (String) cmbType.getSelectedItem();
				
				zoekVliegtuigModel.setGeselecteerdVliegtuigNummer(vliegtuigNummer);
				zoekVliegtuigModel.setGeselecteerdeEigenaar(eigenaar);
				zoekVliegtuigModel.setGeselecteerdModel(model);
				zoekVliegtuigModel.setGeselecteerdType(type);
				ZoekVliegtuigController.handleView(zoekVliegtuigModel);

				// Vul de lijst op met alle vliegtuigen
				DefaultListModel<Vliegtuig> listModel = new DefaultListModel<Vliegtuig>();
				for (Vliegtuig vliegtuig : zoekVliegtuigModel.getVliegtuigen()) {
					listModel.addElement(vliegtuig);
					
				}
				lstVliegtuigen.setModel(listModel);	
			}
		});
		
		btnWijzigen = new JButton("Wijzigen");
		btnWijzigen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Vliegtuig vliegtuig = lstVliegtuigen.getSelectedValue();
				UpdateVliegtuigenController.showView(vliegtuig);
			}
		});
		btnWijzigen.setVisible(false);
		GroupLayout gl_pnlZoekCriteria = new GroupLayout(pnlZoekCriteria);
		gl_pnlZoekCriteria.setHorizontalGroup(
			gl_pnlZoekCriteria.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_pnlZoekCriteria.createSequentialGroup()
					.addContainerGap()
					.addGroup(gl_pnlZoekCriteria.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_pnlZoekCriteria.createSequentialGroup()
							.addGroup(gl_pnlZoekCriteria.createParallelGroup(Alignment.LEADING)
								.addComponent(lblVliegtuignummer)
								.addComponent(lblModel))
							.addGap(18)
							.addGroup(gl_pnlZoekCriteria.createParallelGroup(Alignment.LEADING)
								.addGroup(gl_pnlZoekCriteria.createSequentialGroup()
									.addComponent(cmbModel, GroupLayout.PREFERRED_SIZE, 117, GroupLayout.PREFERRED_SIZE)
									.addGap(41)
									.addComponent(lblType)
									.addGap(31)
									.addComponent(cmbType, GroupLayout.PREFERRED_SIZE, 110, GroupLayout.PREFERRED_SIZE)
									.addGap(98)
									.addComponent(lblEigenaar)
									.addGap(18)
									.addComponent(cmbEigenaar, GroupLayout.PREFERRED_SIZE, 116, GroupLayout.PREFERRED_SIZE))
								.addComponent(txtVliegtuignummer, GroupLayout.PREFERRED_SIZE, 218, GroupLayout.PREFERRED_SIZE)))
						.addGroup(gl_pnlZoekCriteria.createSequentialGroup()
							.addComponent(btnZoeken)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(btnWijzigen)))
					.addContainerGap(19, Short.MAX_VALUE))
		);
		gl_pnlZoekCriteria.setVerticalGroup(
			gl_pnlZoekCriteria.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_pnlZoekCriteria.createSequentialGroup()
					.addGroup(gl_pnlZoekCriteria.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblVliegtuignummer)
						.addComponent(txtVliegtuignummer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(gl_pnlZoekCriteria.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblModel)
						.addComponent(cmbModel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblType)
						.addComponent(cmbType, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblEigenaar)
						.addComponent(cmbEigenaar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(gl_pnlZoekCriteria.createParallelGroup(Alignment.BASELINE)
						.addComponent(btnZoeken)
						.addComponent(btnWijzigen))
					.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
		);
		pnlZoekCriteria.setLayout(gl_pnlZoekCriteria);
		getContentPane().setLayout(groupLayout);
		
		// Vul de combobox met vliegtuigmodellen
		cmbModel.addItem("Selecteer model");
		for (String vliegtuigModel : zoekVliegtuigModel.getVliegtuigModellen()) {
			cmbModel.addItem(vliegtuigModel);
		}
		
		cmbType.addItem("Selecteer type");
		// Vul de combobox met vliegtuigtypes
		for (String vliegtuigType : zoekVliegtuigModel.getVliegtuigTypes()) {
			cmbType.addItem(vliegtuigType);
		}
		
		Eigenaar tijdelijkeEigenaar = new Eigenaar("M", 1, "Selecteer eigenaar", null);
		tijdelijkeEigenaar.setEigenaarID(-1);
		cmbEigenaar.addItem(tijdelijkeEigenaar);
		// Vul de combobox met eigenaars
		for (Eigenaar eigenaar : zoekVliegtuigModel.getEigenaars()) {
			cmbEigenaar.addItem(eigenaar);
		}
		
		// Vul de lijst op met alle vliegtuigen
		DefaultListModel<Vliegtuig> listModel = new DefaultListModel<Vliegtuig>();
		for (Vliegtuig vliegtuig : zoekVliegtuigModel.getVliegtuigen()) {
			listModel.addElement(vliegtuig);
		}
		lstVliegtuigen.setModel(listModel);
	}
}